package cl.solidit.geomanagement.persistance.model;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Propiedad {
	@Id
	@GeneratedValue(strategy = GenerationType.TABLE)
	private Long id;
	private Long numero;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "tipo_propiedad")
	private TipoPropiedad tipoPropiedad;
	@Column(precision = 20, scale = 4, name = "metros_cuadrados")
	private BigDecimal metrosCuadrados;
	@Column(nullable = false)
	private String direccion;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "comuna")
	private Comuna comuna;
	@Column(name = "fecha_ingreso")
	private Date fechaIngreso;
	private String detalle;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "propietario", nullable = true)
	private Persona propietario;
	@Column(precision = 20, scale = 4)
	private BigDecimal valor;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "disponibilidad_visita")
	private DisponibilidadVisita disponibilidadVisita;
	private String latitud;
	private String longitud;
	@OneToMany(mappedBy = "propiedad")
	private List<Visita> visitas = new ArrayList<Visita>(0);
	@Column(nullable = false)
	private Boolean venta;
	@Column(nullable = false)
	private Boolean disponible;
	@Column(nullable = false)
	private Boolean amoblada;
	private Integer percepcion;
	@Column(name = "ultima_visita")
	private Date ultimaVisita;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "estado", nullable = false)
	private EstadoPropiedad estado;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "captador")
	private Persona captador;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "agente")
	private Usuario agente;
	@Column(name = "valor_en_uf", nullable = false)
	private Boolean valorEnUf;
	@Column(name = "negocio_externo")
	private Boolean negocioExterno;
	private Boolean ofertada;

	public Propiedad() {
	}

	public Propiedad(Long numero, TipoPropiedad tipoPropiedad,
			BigDecimal metrosCuadrados, String direccion, Comuna comuna,
			Date fechaIngreso, String detalle, Persona propietario,
			BigDecimal valor, DisponibilidadVisita disponibilidadVisita,
			String latitud, String longitud, Boolean venta, Boolean disponible,
			Boolean amoblada, Boolean ofertada) {
		super();
		this.numero = numero;
		this.tipoPropiedad = tipoPropiedad;
		this.metrosCuadrados = metrosCuadrados;
		this.direccion = direccion;
		this.comuna = comuna;
		this.fechaIngreso = fechaIngreso;
		this.detalle = detalle;
		this.propietario = propietario;
		this.valor = valor;
		this.disponibilidadVisita = disponibilidadVisita;
		this.latitud = latitud;
		this.longitud = longitud;
		this.venta = venta;
		this.disponible = disponible;
		this.amoblada = amoblada;
		this.ofertada = ofertada;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Long getNumero() {
		return numero;
	}

	public void setNumero(Long numero) {
		this.numero = numero;
	}

	public TipoPropiedad getTipoPropiedad() {
		return tipoPropiedad;
	}

	public void setTipoPropiedad(TipoPropiedad tipoPropiedad) {
		this.tipoPropiedad = tipoPropiedad;
	}

	public BigDecimal getMetrosCuadrados() {
		return metrosCuadrados;
	}

	public void setMetrosCuadrados(BigDecimal metrosCuadrados) {
		this.metrosCuadrados = metrosCuadrados;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public Comuna getComuna() {
		return comuna;
	}

	public void setComuna(Comuna comuna) {
		this.comuna = comuna;
	}

	public String getDetalle() {
		return detalle;
	}

	public void setDetalle(String detalle) {
		this.detalle = detalle;
	}

	public BigDecimal getValor() {
		return valor;
	}

	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}

	public DisponibilidadVisita getDisponibilidadVisita() {
		return disponibilidadVisita;
	}

	public Date getFechaIngreso() {
		return fechaIngreso;
	}

	public void setFechaIngreso(Date fechaIngreso) {
		this.fechaIngreso = fechaIngreso;
	}

	public void setDisponibilidadVisita(
			DisponibilidadVisita disponibilidadVisita) {
		this.disponibilidadVisita = disponibilidadVisita;
	}

	public String getLatitud() {
		return latitud;
	}

	public void setLatitud(String latitud) {
		this.latitud = latitud;
	}

	public String getLongitud() {
		return longitud;
	}

	public void setLongitud(String longitud) {
		this.longitud = longitud;
	}

	public List<Visita> getVisitas() {
		return visitas;
	}

	public void setVisitas(List<Visita> visitas) {
		this.visitas = visitas;
	}

	public Persona getPropietario() {
		return propietario;
	}

	public void setPropietario(Persona propietario) {
		this.propietario = propietario;
	}

	public Boolean getVenta() {
		return venta;
	}

	public void setVenta(Boolean venta) {
		this.venta = venta;
	}

	public Boolean getDisponible() {
		return disponible;
	}

	public void setDisponible(Boolean disponible) {
		this.disponible = disponible;
	}

	public Boolean getAmoblada() {
		return amoblada;
	}

	public void setAmoblada(Boolean amoblada) {
		this.amoblada = amoblada;
	}

	public Integer getPercepcion() {
		return percepcion;
	}

	public void setPercepcion(Integer percepcion) {
		this.percepcion = percepcion;
	}

	public Date getUltimaVisita() {
		return ultimaVisita;
	}

	public void setUltimaVisita(Date ultimaVisita) {
		this.ultimaVisita = ultimaVisita;
	}

	public EstadoPropiedad getEstado() {
		return estado;
	}

	public void setEstado(EstadoPropiedad estado) {
		this.estado = estado;
	}

	public Persona getCaptador() {
		return captador;
	}

	public void setCaptador(Persona captador) {
		this.captador = captador;
	}

	public Usuario getAgente() {
		return agente;
	}

	public void setAgente(Usuario agente) {
		this.agente = agente;
	}

	public Boolean getValorEnUf() {
		return valorEnUf;
	}

	public void setValorEnUf(Boolean valorEnUf) {
		this.valorEnUf = valorEnUf;
	}

	public Boolean getNegocioExterno() {
		return negocioExterno;
	}

	public void setNegocioExterno(Boolean negocioExterno) {
		this.negocioExterno = negocioExterno;
	}

	public Boolean getOfertada() {
		return ofertada;
	}

	public void setOfertada(Boolean ofertada) {
		this.ofertada = ofertada;
	}

}
